\ fatan 05.3.1 NAB

module fatan

: f+u ( u -- ) ( F: r -- r+u )  0 d>f f+ ;
: f*u ( u -- ) ( F: r -- r*u )  0 d>f f* ;

57.2957795130823e fconstant radsize

public:

: FATAN ( r -- arctan )
  fdup  ( F: r r )
  fdup fdup f* fswap  ( F: r r^2 r )
  1  20e f* f>d drop abs 14 +
  ( 1 count )
  0e  ( F: r r^2 0 )
  do  ( F: r r^2 val ) ( -- )
    \ val=(i*i*r^2)/(i+i+1+val):
    i 2* 1+  f+u  ( F: r r^2 tb )
    fover  i i *  f*u  ( F: r r^2 tb ta )
    fswap f/  ( F: r r^2 ta/tb )
  -1 +loop  ( F: r r^2 val )
  fswap fdrop  ( F: r val )
  \ val=r/(1+val):
  1e f+ f/  ( F: arctan ) ;

: deg>rad ( deg -- rad )  radsize f/ ;
: rad>deg ( rad -- deg )  radsize f* ;

end-module
